package ucla.axelia.controlador.servicios;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;

import com.obelisco.modelo.dao.hibernate.UsuarioDAO;
import com.obelisco.modelo.data.DataGenerica;
import com.obelisco.modelo.data.Usuario;

import ucla.axelia.controlador.interfaces.IServicioAdministracionAsignarProgramasUsuarios;
import ucla.axelia.modelo.dao.ServicioProgramaDAO;
import ucla.axelia.modelo.dao.ServicioUsuarioProgramaDAO;
import ucla.axelia.modelo.data.UsuarioPrograma;

public class ServicioAdministracionAsignarProgramasUsuarios implements IServicioAdministracionAsignarProgramasUsuarios{

	private ServicioUsuarioProgramaDAO servicioUsuarioProgramaDAO;
	private UsuarioDAO servicioUsuarioDAO;
	private ServicioProgramaDAO servicioProgramaDAO;
	
	
	public List buscarUsuariosPorCriterios(Map criterios) {	
		List condiciones = new ArrayList();
		for (Iterator iter = criterios.keySet().iterator(); iter.hasNext(); ) {
			String campo = (String)iter.next();
			String valor = (String)criterios.get(campo);
			condiciones.add(Restrictions.like(campo, "%"+valor+"%"));
		}
		List usuarios = this.servicioUsuarioDAO.findByCriterions(Usuario.class, condiciones);
		return usuarios;
	}

	public void guardarUsuarioPrograma(UsuarioPrograma usuarioprograma) {
		servicioUsuarioProgramaDAO.guardar(usuarioprograma);
	}

	public void eliminarProgramasPorUsuario(String login) {	
		Session session = this.servicioUsuarioProgramaDAO.getSessionFactory().getCurrentSession();
		String hql = "delete UsuarioPrograma where id.login = :login";
		Query query = session.createQuery(hql);
		query.setString("login", login);
		query.executeUpdate();
	}
	
	public List buscarProgramasPorUsuario(String login) {
		return this.servicioUsuarioProgramaDAO.buscarProgramasPorUsuario(login);
	}

	public List buscarProgramas() {
		return servicioProgramaDAO.buscarTodos(DataGenerica.DATA_ACTIVO);
	}


	// Getter y Setter
	public ServicioProgramaDAO getServicioProgramaDAO() {
		return servicioProgramaDAO;
	}

	public void setServicioProgramaDAO(ServicioProgramaDAO servicioProgramaDAO) {
		this.servicioProgramaDAO = servicioProgramaDAO;
	}

	public UsuarioDAO getServicioUsuarioDAO() {
		return servicioUsuarioDAO;
	}

	public void setServicioUsuarioDAO(UsuarioDAO servicioUsuarioDAO) {
		this.servicioUsuarioDAO = servicioUsuarioDAO;
	}

	public ServicioUsuarioProgramaDAO getServicioUsuarioProgramaDAO() {
		return servicioUsuarioProgramaDAO;
	}

	public void setServicioUsuarioProgramaDAO(
			ServicioUsuarioProgramaDAO servicioUsuarioProgramaDAO) {
		this.servicioUsuarioProgramaDAO = servicioUsuarioProgramaDAO;
	}

}